Instrumentation provides a means of obtaining data relating to program performance and data useful in program analysis and debugging. The data retrieved by instrumentation is helpful to the programmer working with a parallel multiprocessor. Unfortunately, current efforts at instrumentation have been plagued with a difficult dilemma. They seek to monitor run-time behavior, but in so doing, they affect the run-time behavior of the parallel program being monitored. Thus, in order to properly instrument a system, programmers have had to pay the price of changing the true behavior of the system. This dilemma is akin to the proposition presented in the Heisenberg uncertainty principle which proposes that measurement of a system alters the behavior of the system.
Another problem presented by current instrumentation strategies is the usefulness of the information that is derived from such approaches. Often, only a single value (such as the total number of operations performed) is derived. Standing alone, such a value has little meaning because it reveals little about what can be improved and little about the maximum achievable level of parallelism that may be obtained. Hence, there is a need for a more useful systematic measurement technique.